import { Entity, Column, Index } from "typeorm";
import { BaseEntity } from "@/common/entities/base.entity";

/**
 * 错误日志实体
 * 用于存储前端错误信息，包括JavaScript运行时错误、资源加载错误等
 */
@Entity("error_logs")
export class ErrorLogEntity extends BaseEntity {
  /**
   * 用户ID
   * 发生错误的用户唯一标识，可为空表示未登录用户
   */
  @Column({ type: "varchar", length: 64, nullable: true, comment: "用户ID" })
  @Index("idx_user_id")
  userId: string;

  /**
   * 错误类型
   * 错误的分类，如：js_error(JS错误)、resource_error(资源错误)、promise_error(Promise错误)、api_error(API错误)
   */
  @Column({ type: "varchar", length: 50, comment: "错误类型" })
  errorType: string;

  /**
   * 错误消息
   * 错误的详细描述信息，通常是错误对象的message属性
   */
  @Column({ type: "text", comment: "错误消息" })
  errorMessage: string;

  /**
   * 错误堆栈
   * 完整的错误堆栈信息，用于调试和定位问题
   */
  @Column({ type: "text", nullable: true, comment: "错误堆栈信息" })
  errorStack: string;

  /**
   * 页面URL
   * 发生错误时所在的页面地址
   */
  @Column({ type: "varchar", length: 500, nullable: true, comment: "发生错误的页面URL" })
  pageUrl: string;

  /**
   * 浏览器类型
   * 用户使用的浏览器名称和版本，如：Chrome/91.0.4472.124
   */
  @Column({ type: "varchar", length: 50, nullable: true, comment: "浏览器类型" })
  browser: string;

  /**
   * 操作系统
   * 用户设备的操作系统信息，如：Windows 10, macOS 11.2.3
   */
  @Column({ type: "varchar", length: 50, nullable: true, comment: "操作系统" })
  os: string;

  /**
   * IP地址
   * 用户的IP地址，用于地理位置分析
   */
  @Column({ type: "varchar", length: 45, nullable: true, comment: "IP地址" })
  ipAddress: string;

  /**
   * 用户代理字符串
   * 完整的User-Agent字符串，包含设备、浏览器、操作系统等详细信息
   */
  @Column({ type: "text", nullable: true, comment: "用户代理字符串" })
  userAgent: string;

  /**
   * 错误发生时间
   * 错误实际发生的时间
   */
  @Column({ type: "datetime", nullable: true, comment: "错误发生时间" })
  occurredAt: Date;
}